package 代码记录.指定公司代码练习记录.备战快手;

/**
 * @author zx
 * @create 2023-05-13 12:13
 */
public class 实现Integer的parseInt {
    /**
     * 剑指 Offer 67. 把字符串转换成整数
     */
    public int myAtoi(String s) {
        char[] arr = s.trim().toCharArray();//去前后空格
        if (arr.length == 0) {
            return 0;
        }
        //记录第一个符合是否为负数
        boolean flag = false;
        //开始遍历的位置
        int i = 1;
        //如果首个非空格字符为负号,那么从位置1开始遍历字符串,并且结果需要变成负数
        if (arr[0] == '-') {
            flag = true;
        } else if (arr[0] != '+') {//如果首个非空格字符不是负号也不是加号,那么从第一个元素开始遍历
            i = 0;
        }
        int limit = Integer.MAX_VALUE / 10;
        int res = 0;
        for (int j = i; j < arr.length; j++) {
            //遇到非数字直接退出
            if (arr[j] > '9' || arr[j] < '0') {
                break;
            }
            if (res > limit || (res == limit && arr[j] > '7')) {
                //根据字符串首负号判断返回最大值还是最小值
                return flag == false ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            //字符获取数字需要 - '0' 的位移
            res = res * 10 + (arr[j] - '0');
        }
        if(flag){
            res = -res;
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }
}
